
import DyHttpClient from "./DyHttpClient";
DyHttpClient.defaultOptions.baseURL = 'https://sale.zhangshang.cc/api';  // 所有请求都会以这个 URL 作为基础路径
DyHttpClient.defaultOptions.timeout = 15000;  // 请求超时设置为 15 秒

export class TimeBasedRequest {
    private static KEY_LAST_REQUEST_TIME = 'lastRequestTime';

    /**
     * 检查是否需要请求数据
     * @param {number} startHour - 目标时间段的开始小时
     * @param {number} startMinute - 目标时间段的开始分钟
     * @param {number} endHour - 目标时间段的结束小时
     * @param {number} endMinute - 目标时间段的结束分钟
     * @returns {Promise<boolean>} - 返回一个 Promise，表示请求是否成功
     */
    public static async checkAndRequestData(startHour: number, startMinute: number, endHour: number, endMinute: number): Promise<boolean> {
        const now = new Date();
        const currentHour = now.getHours();
        const currentMinute = now.getMinutes();
        const currentDate = now.toDateString(); // 获取当前日期（如 "Mon Oct 09 2023"）
        // 检查当前时间是否在目标时间段内
        if (
            (currentHour > startHour || (currentHour === startHour && currentMinute >= startMinute)) &&
            (currentHour < endHour || (currentHour === endHour && currentMinute < endMinute))
        ) {
            console.log('当前时间在目标时间段内，请求数据...');
            return this.requestData();
        } else {
            // 检查上次请求数据的时间
            const lastRequestTime = cc.sys.localStorage.getItem(this.KEY_LAST_REQUEST_TIME);
            if (lastRequestTime) {
                const lastRequestDate = new Date(lastRequestTime).toDateString();
                // 如果上次请求数据的时间不是今天，则立刻请求数据
                if (lastRequestDate !== currentDate) {
                    console.log('当前时间不在目标时间段内，但上次请求数据不是今天，立刻请求数据...');
                    return this.requestData();
                } else {
                    console.log('当前时间不在目标时间段内，且上次请求数据是今天，无需请求数据。');
                    return Promise.resolve(false); // 无需请求数据，返回 false
                }
            } else {
                // 如果从未请求过数据，则立刻请求数据
                console.log('从未请求过数据，立刻请求数据...');
                return this.requestData();
            }
        }
    }

    /**
     * 请求数据的逻辑
     * @returns {Promise<boolean>} - 返回一个 Promise，表示请求是否成功
     */
    private static async requestData(): Promise<boolean> {
        return new Promise((resolve, reject) => {
            // 模拟请求数据的逻辑
            console.log('正在请求数据...');

            DyHttpClient.get("/game/state", { appId: "ttffb4890960be1a7502" })
                .then((response) => {
                    if (response.code == 200 && response.data) {
                        // 记录当前请求数据的时间
                        const now = new Date();
                        cc.sys.localStorage.setItem(this.KEY_LAST_REQUEST_TIME, now.toString());
                        let dataState = response.data.state;
                        resolve(dataState); // 请求成功，返回 true
                    }
                    console.log("GET Response:", response);
                })
                .catch((error) => {
                    console.log('数据请求失败！');
                    reject(false); // 请求失败，返回 false
                    console.error("GET Error:", error);
                });
        });
    }
}

